home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-68k-src / machines / amiga68k / libsrc / amigalib / libcreatepool.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  1KB  |  45 lines

  1. #include "pool.h"
  2.  
  3. #define NEWLIST(l) ((l)->mlh_Head = (struct MinNode *)&(l)->mlh_Tail, \
  4.                     (l)->mlh_Tail = NULL, \
  5.                     (l)->mlh_TailPred = (struct MinNode *)&(l)->mlh_Head)
  6.  
  7. APTR LibCreatePool(ULONG requirements, ULONG puddleSize, ULONG threshSize)
  8. {
  9.   if (SysBase->LibNode.lib_Version>=39)
  10.     return (CreatePool(requirements,puddleSize,threshSize));
  11.   else {
  12.  
  13.     POOL *pool=NULL;
  14.  
  15.     if (threshSize<=puddleSize) {
  16.       puddleSize+=7;
  17.       if ((pool=(POOL *)AllocMem(sizeof(POOL),MEMF_ANY))!=NULL) {
  18.         NEWLIST(&pool->PuddleList);
  19.         pool->MemoryFlags=requirements;
  20.         pool->PuddleSize=puddleSize&~7;
  21.         pool->ThreshSize=threshSize;
  22.       }
  23.     }
  24.     return pool;
  25.   }
  26. }
  27.  
  28. VOID LibDeletePool(POOL *poolHeader)
  29. {
  30.   if (SysBase->LibNode.lib_Version>=39)
  31.     DeletePool(poolHeader);
  32.   else {
  33.  
  34.     if (poolHeader!=NULL) {
  35.  
  36.       ULONG *pool,size;
  37.  
  38.       while((pool=(ULONG *)RemHead((struct List *)&poolHeader->PuddleList))!=NULL) {
  39.         size=*--pool; FreeMem(pool,size);
  40.       }
  41.       FreeMem(poolHeader,sizeof(POOL));
  42.     }
  43.   }
  44. }
  45.